package com.cke.yang.storage.app.service;

import com.cke.yang.storage.api.dto.request.StgFileListRequest;
import com.cke.yang.storage.api.dto.response.FileDownloadResponse;
import com.cke.yang.storage.api.dto.response.StgFileListResponse;
import com.cke.yang.storage.domain.entity.StgFile;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 存储模块-文件应用层
 *
 * @author yuyang
 */
public interface StgFileService {

    /**
     * 根据存储源和路径获取文件列表
     *
     * @param request 查询请求参数
     * @return 文件列表
     */
    List<StgFileListResponse> list(StgFileListRequest request);

    /**
     * 批量上传文件
     *
     * @param files 上传的文件列表
     * @param sourceId 存储源ID
     * @param uploadPathBase64 上传路径(Base64编码)
     * @return 上传成功的文件记录列表
     */
    List<StgFile> upload(MultipartFile[] files, Long sourceId, String uploadPathBase64);

    /**
     * 根据文件Key下载文件
     *
     * @param fileKey 文件Key
     * @return 文件资源和文件信息的包装对象
     */
    FileDownloadResponse downloadByFileKey(String fileKey);

    /**
     * 创建目录
     *
     * @param sourceId 存储源ID
     * @param directoryName 目录名称
     * @param parentPath 父目录路径
     * @return 创建的目录文件记录
     */
    StgFile mkdir(Long sourceId, String directoryName, String parentPath);

    /**
     * 删除文件
     *
     * @param fileKey 文件Key
     * @return 是否删除成功
     */
    boolean remove(String fileKey);

    /**
     * 重命名文件
     *
     * @param fileKey 文件Key
     * @param newFileName 新文件名
     * @return 重命名后的文件记录
     */
    StgFile rename(String fileKey, String newFileName);

}

